package com.powerflasher.SampleApp {
	/**
	 * @author Amiel Zúñiga
	 */
	import org.flixel.*;

	public class Nivel4_2 extends FlxState {
		[Embed(source = "13.png")] public static var bricks : Class;

		[Embed(source = "map4_2_3.csv", mimeType = "application/octet-stream")] public static var mapaWalls : Class;
		[Embed(source = "map4_2_1.csv", mimeType = "application/octet-stream")] public static var mapa : Class;
		[Embed(source = "map4_2_2.csv", mimeType = "application/octet-stream")]public static var mapaElastico : Class;

		
		private var paused:Boolean;
		
		private var jugador : Jugador;
		private var tanque : Tanque;
		private var map : FlxTilemap;
		private var mapWalls : FlxTilemap;
		private var mapElastic : FlxTilemap;
		private var t : Number = 0;
		private var t2 : Number = 0;
		private var t3 : Number = 0;
		private var hmax : Boolean = true;
		private var tmax : Boolean = true;
		private var vmax : Boolean = true;
		private var pico1 : Pico;
		private var pico2 : Pico;
		private var picos : FlxGroup;
		private var plataforma1 : Plataforma;
		private var plataforma2 : Plataforma;
		private var plataforma3 : Plataforma;
		private var box1 : Box;
		private var box2 : Box;
		private var box3 : Box;
		private var box4 : Box;
		private var boxes : FlxGroup;
		private var balai : Bala;
		private var bala : Bala;
		private var balad : Bala;
		private var balas : FlxGroup;
		private var texto:FlxText;
		private var cielo:sky;
		

		public function Nivel4_2() {
			super();
		}

		override public function create() : void {
			jugador = new Jugador(556, 0);
			tanque = new Tanque(150, 644, 4, 1);

			plataforma1 = new Plataforma(96, 96);
			plataforma2 = new Plataforma(352, 416);
			plataforma3 = new Plataforma(96, 544);
			plataforma1.allowCollisions = FlxObject.UP;
			plataforma2.allowCollisions = FlxObject.UP;
			plataforma2.allowCollisions = FlxObject.UP;

			box1 = new Box(128, 64);
			box2 = new Box(320, 64);
			box3 = new Box(512, 256);
			box4 = new Box(384, 384);
			box1.acceleration.y=1000;
			box2.acceleration.y=1000;
			box3.acceleration.y=1000;
			box4.acceleration.y=1000;
			boxes = new FlxGroup();
			boxes.add(box1);
			boxes.add(box2);
			boxes.add(box3);
			boxes.add(box4);

			bala = new Bala(-10, 0, 0, 0, 0);
			balai = new Bala(-10, 0, 0, 0, 0);
			balad = new Bala(-10, 0, 0, 0, 0);
			balas = new FlxGroup();
			balas.add(bala);
			balas.add(balai);
			balas.add(balad);

			pico1 = new Pico(512, 320, 2);
			pico2 = new Pico(544, 320, 2);
			picos = new FlxGroup();
			picos.add(pico1);
			picos.add(pico2);

			map = new FlxTilemap();
			map.loadMap(new mapa(), bricks, 32, 32);
			cielo = new sky(0, 0);
			mapWalls = new FlxTilemap();
			mapWalls.loadMap(new mapaWalls(), bricks, 32, 32);
			mapWalls.setTileProperties(13, FlxObject.UP);
			mapWalls.setTileProperties(6, FlxObject.UP);
			
			mapElastic = new FlxTilemap();
			mapElastic.loadMap(new mapaElastico(), bricks, 32, 32);
			mapElastic.setTileProperties(13, FlxObject.UP);
			mapElastic.setTileProperties(11, FlxObject.UP);
			mapElastic.setTileProperties(6, FlxObject.UP);


			paused = false;
			texto=new FlxText(0, 340, FlxG.width, "PAUSED GAME").setFormat(null, 65, 0xFFFFFF, "center");
			texto.kill();


			add(cielo);
			add(picos);
			add(mapWalls);
			add(map);
			add(mapElastic);
			add(jugador);
			add(tanque);
			add(plataforma1);
			add(plataforma2);
			add(plataforma3);
			add(boxes);
			add(balas);
			add(texto);

			FlxG.worldBounds = new FlxRect(0, 0, 640, 800);
			FlxG.camera.setBounds(0, 0, 640, 2300);
			FlxG.camera.y -= 32;
		}

		public function movimientoH() : void {
			if (tmax && tanque.x < 348) {
				tanque.x += 1;
			}
			if (tmax && tanque.x >= 348) {
				tmax = false;
			}
			if (!tmax && tanque.x > 32) {
				tanque.x -= 1;
			}
			if (!tmax && tanque.x <= 32) {
				tmax = true;
			}
			if (hmax && plataforma2.x < 352) {
				plataforma2.x += 1.5;
				plataforma3.x -= 1.5;
				box4.y = plataforma3.y - 32;
				box4.x = plataforma3.x + 64;
			}
			if (hmax && plataforma2.x >= 352) {
				hmax = false;
			}
			if (!hmax && plataforma2.x > 96) {
				plataforma2.x -= 1.5;
				plataforma3.x += 1.5;
				box4.y = plataforma3.y - 32;
				box4.x = plataforma3.x + 64;
			}
			if (!hmax && plataforma2.x <= 96) {
				hmax = true;
			}

			if (jugador.overlaps(plataforma2)) {
				jugador.y = 346;
				if (hmax && plataforma2.x < 352) {
					jugador.x += 1.5;
				}
				if (!hmax && plataforma2.x > 96) {
					jugador.x -= 1.5;
				}
				jugador.acceleration.y = 0;
			}
			if (jugador.overlaps(plataforma3)) {
				jugador.y = 474;
				if (hmax && plataforma2.x < 352) {
					jugador.x -= 1.5;
				}
				if (!hmax && plataforma2.x > 96) {
					jugador.x += 1.5;
				}
				jugador.acceleration.y = 0;
			}
		}

		public function movimientoV() : void {
			if (vmax && plataforma1.y < 320) {
				plataforma1.y += 1.5;
				if(box1.x>64 && box1.x<212){
					box1.y = plataforma1.y - 34;
				}
			}
			if (vmax && plataforma1.y >= 320) {
				vmax = false;
			}
			if (!vmax && plataforma1.y > 96) {
				plataforma1.y -= 1.5;
				if(box1.x>64 && box1.x<212){
					box1.y = plataforma1.y - 34;
				}
			}
			if (!vmax && plataforma1.y <= 96) {
				vmax = true;
			}
			if (FlxG.overlap(jugador, plataforma1)) {
				jugador.y = plataforma1.y - 71;
				jugador.acceleration.y = 0;
			}
			
		}

		override public function update() : void {
			
			if(FlxG.keys.justPressed("P"))
				paused = !paused;
			if(!paused)
				texto.kill();
			if(paused){
				texto.revive();
				return;
			}
			
			super.update();
			
			if(FlxG.keys.pressed("RIGHT")&&jugador.x<590){
				jugador.x = jugador.x+2;
				jugador.play("derecha");
			}
			if(FlxG.keys.pressed("LEFT")&&jugador.x>0){
				jugador.x = jugador.x-2;
				jugador.play("izquierda");
			}
			if(FlxG.keys.justPressed("UP") && FlxG.collide(jugador,map)){
				jugador.velocity.y = -380;
				jugador.y -= 30;
				jugador.play("arriba");	
			}
			if(FlxG.keys.justPressed("UP") && FlxG.collide(jugador,boxes)){
				jugador.velocity.y = -380;
				jugador.y -= 30;
				jugador.play("arriba");	
			}
			if(FlxG.keys.justPressed("UP") && (jugador.overlaps(plataforma1)||jugador.overlaps(plataforma2)||jugador.overlaps(plataforma3))){
				jugador.velocity.y = -380;
				jugador.y -= 32;
				jugador.play("arriba");	
			}
			if ((FlxG.collide(jugador, mapElastic))) {
				jugador.velocity.y = -500;
				jugador.y -= 80;
				jugador.play("arriba");
			}

			jugador.acceleration.y = 1000;

			if (FlxG.overlap(box1, tanque)) {
				box1.kill();
				tanque.reduceLife();
			}

			if (FlxG.overlap(box2, tanque)) {
				box2.kill();
				tanque.reduceLife();
			}

			if (FlxG.overlap(box3, tanque)) {
				box3.kill();
				tanque.reduceLife();
			}

			if (FlxG.overlap(box4, tanque)) {
				box4.kill();
				tanque.reduceLife();
			}

			if (tanque.getVida() == 0) {
				tanque.kill();
				balas.kill();
				FlxG.switchState(new Nivel1());
			}
			if(FlxG.collide(box1, map)){
				box1.reset(128, 64);
			}
			if(FlxG.collide(box2, map)){
				box2.reset(320, 64);
			}
			if(FlxG.collide(box3, map)){
				box3.reset(512, 256);
			}
			if(FlxG.collide(box4, map)){
				box4.reset(384, 384);
			}

			t += FlxG.elapsed;
			if (t >= 2) {
				bala = tanque.fire(tanque.x + 100, tanque.y, 10, (jugador.x - tanque.x), (jugador.y - tanque.y));
				balai = tanque.fire(tanque.x + 100, tanque.y, 10, (jugador.x - tanque.x - 175), (jugador.y - tanque.y));
				balad = tanque.fire(tanque.x + 100, tanque.y, 10, (jugador.x - tanque.x + 275), (jugador.y - tanque.y));
				add(bala);
				add(balai);
				add(balad);
				balas.add(bala);
				balas.add(balai);
				balas.add(balad);
				t = 0;
			}
			if (jugador.overlaps(tanque)) {
				//jugador.kill();
				//FlxG.resetState();
			}
			if (FlxG.overlap(jugador, balas)) {
				//jugador.kill();
				//FlxG.resetState();
			}

			t2 += FlxG.elapsed;
			if (t2 > 1.5) {
				t2 = 0;
			}
			if (t2 == 0) {
				pico1.kill();
				pico2.kill();
			}

			t3 += FlxG.elapsed;
			if (t3 > 3) {
				t3 = 0;
			}
			if (t3 == 0) {
				pico1.revive();
				pico2.revive();
			}

			if (FlxG.overlap(jugador, picos)) {
				jugador.kill();
				FlxG.resetState();
			}


			movimientoH();
			movimientoV();

			FlxG.collide(jugador, map);
			FlxG.collide(jugador, mapWalls);
			FlxG.overlap(jugador, plataforma1);
			FlxG.overlap(jugador, plataforma2);
			FlxG.overlap(jugador, plataforma3);
			FlxG.collide(boxes, map);
			FlxG.collide(boxes, mapWalls);
			FlxG.collide(jugador, mapElastic);
			FlxG.collide(jugador, boxes);
			FlxG.overlap(jugador, balas);
			FlxG.overlap(boxes, tanque);
			FlxG.overlap(box1, plataforma1);
			
		}

	}
}
